home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Miami / MiamiSDK / netinclude / netinet / ip_icmp.h < prev    next >
C/C++ Source or Header  |  1997-12-04  |  5KB  |  162 lines

  1. #ifndef _NETINET_IP_ICMP_H_
  2. #define _NETINET_IP_ICMP_H_
  3.  
  4. #ifndef _SYS_TYPES_H_
  5. #include <sys/types.h>
  6. #endif
  7.  
  8. #ifndef _MACHINE_TYPES_H_
  9. #include <machine/types.h>
  10. #endif
  11.  
  12. #ifndef _NETINET_IN_H_
  13. #include <netinet/in.h>
  14. #endif
  15.  
  16. #ifndef _NETINET_IN_SYSTM_H_
  17. #include <netinet/in_systm.h>
  18. #endif
  19.  
  20. #ifndef _NETINET_IP_H_
  21. #include <netinet/ip.h>
  22. #endif
  23.  
  24. /*
  25.  * Interface Control Message Protocol Definitions.
  26.  * Per RFC 792, September 1981.
  27.  */
  28.  
  29. /*
  30.  * Internal of an ICMP Router Advertisement
  31.  */
  32. struct icmp_ra_addr {
  33.     u_int32_t ira_addr;
  34.     u_int32_t ira_preference;
  35. };
  36.  
  37. /*
  38.  * Structure of an icmp header.
  39.  */
  40. struct icmp {
  41.     u_char    icmp_type;        /* type of message, see below */
  42.     u_char    icmp_code;        /* type sub code */
  43.     u_short    icmp_cksum;        /* ones complement cksum of struct */
  44.     union {
  45.         u_char ih_pptr;            /* ICMP_PARAMPROB */
  46.         struct in_addr ih_gwaddr;    /* ICMP_REDIRECT */
  47.         struct ih_idseq {
  48.             n_short    icd_id;
  49.             n_short    icd_seq;
  50.         } ih_idseq;
  51.         long ih_void;
  52.  
  53.         /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
  54.         struct ih_pmtu {
  55.             n_short ipm_void;
  56.             n_short ipm_nextmtu;
  57.         } ih_pmtu;
  58.  
  59.         struct ih_rtradv {
  60.             u_char irt_num_addrs;
  61.             u_char irt_wpa;
  62.             u_int16_t irt_lifetime;
  63.         } ih_rtradv;
  64.     } icmp_hun;
  65. #define    icmp_pptr    icmp_hun.ih_pptr
  66. #define    icmp_gwaddr    icmp_hun.ih_gwaddr
  67. #define    icmp_id        icmp_hun.ih_idseq.icd_id
  68. #define    icmp_seq    icmp_hun.ih_idseq.icd_seq
  69. #define    icmp_void    icmp_hun.ih_void
  70. #define    icmp_pmvoid    icmp_hun.ih_pmtu.ipm_void
  71. #define    icmp_nextmtu    icmp_hun.ih_pmtu.ipm_nextmtu
  72. #define    icmp_num_addrs    icmp_hun.ih_rtradv.irt_num_addrs
  73. #define    icmp_wpa    icmp_hun.ih_rtradv.irt_wpa
  74. #define    icmp_lifetime    icmp_hun.ih_rtradv.irt_lifetime
  75.     union {
  76.         struct id_ts {
  77.             n_time its_otime;
  78.             n_time its_rtime;
  79.             n_time its_ttime;
  80.         } id_ts;
  81.         struct id_ip  {
  82.             struct ip idi_ip;
  83.             /* options and then 64 bits of data */
  84.         } id_ip;
  85.         struct icmp_ra_addr id_radv;
  86.         u_long    id_mask;
  87.         char    id_data[1];
  88.     } icmp_dun;
  89. #define    icmp_otime    icmp_dun.id_ts.its_otime
  90. #define    icmp_rtime    icmp_dun.id_ts.its_rtime
  91. #define    icmp_ttime    icmp_dun.id_ts.its_ttime
  92. #define    icmp_ip        icmp_dun.id_ip.idi_ip
  93. #define    icmp_radv    icmp_dun.id_radv
  94. #define    icmp_mask    icmp_dun.id_mask
  95. #define    icmp_data    icmp_dun.id_data
  96. };
  97.  
  98. /*
  99.  * Lower bounds on packet lengths for various types.
  100.  * For the error advice packets must first insure that the
  101.  * packet is large enough to contain the returned ip header.
  102.  * Only then can we do the check to see if 64 bits of packet
  103.  * data have been returned, since we need to check the returned
  104.  * ip header length.
  105.  */
  106. #define    ICMP_MINLEN    8                /* abs minimum */
  107. #define    ICMP_TSLEN    (8 + 3 * sizeof (n_time))    /* timestamp */
  108. #define    ICMP_MASKLEN    12                /* address mask */
  109. #define    ICMP_ADVLENMIN    (8 + sizeof (struct ip) + 8)    /* min */
  110. #define    ICMP_ADVLEN(p)    (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
  111.     /* N.B.: must separately check that ip_hl >= 5 */
  112.  
  113. /*
  114.  * Definition of type and code field values.
  115.  */
  116. #define    ICMP_ECHOREPLY        0        /* echo reply */
  117. #define    ICMP_UNREACH        3        /* dest unreachable, codes: */
  118. #define        ICMP_UNREACH_NET    0        /* bad net */
  119. #define        ICMP_UNREACH_HOST    1        /* bad host */
  120. #define        ICMP_UNREACH_PROTOCOL    2        /* bad protocol */
  121. #define        ICMP_UNREACH_PORT    3        /* bad port */
  122. #define        ICMP_UNREACH_NEEDFRAG    4        /* IP_DF caused drop */
  123. #define        ICMP_UNREACH_SRCFAIL    5        /* src route failed */
  124. #define        ICMP_UNREACH_NET_UNKNOWN 6        /* unknown net */
  125. #define        ICMP_UNREACH_HOST_UNKNOWN 7        /* unknown host */
  126. #define        ICMP_UNREACH_ISOLATED    8        /* src host isolated */
  127. #define        ICMP_UNREACH_NET_PROHIB    9        /* prohibited access */
  128. #define        ICMP_UNREACH_HOST_PROHIB 10        /* ditto */
  129. #define        ICMP_UNREACH_TOSNET    11        /* bad tos for net */
  130. #define        ICMP_UNREACH_TOSHOST    12        /* bad tos for host */
  131. #define    ICMP_SOURCEQUENCH    4        /* packet lost, slow down */
  132. #define    ICMP_REDIRECT        5        /* shorter route, codes: */
  133. #define        ICMP_REDIRECT_NET    0        /* for network */
  134. #define        ICMP_REDIRECT_HOST    1        /* for host */
  135. #define        ICMP_REDIRECT_TOSNET    2        /* for tos and net */
  136. #define        ICMP_REDIRECT_TOSHOST    3        /* for tos and host */
  137. #define    ICMP_ECHO        8        /* echo service */
  138. #define    ICMP_ROUTERADVERT    9        /* router advertisement */
  139. #define    ICMP_ROUTERSOLICIT    10        /* router solicitation */
  140. #define    ICMP_TIMXCEED        11        /* time exceeded, code: */
  141. #define        ICMP_TIMXCEED_INTRANS    0        /* ttl==0 in transit */
  142. #define        ICMP_TIMXCEED_REASS    1        /* ttl==0 in reass */
  143. #define    ICMP_PARAMPROB        12        /* ip header bad */
  144. #define        ICMP_PARAMPROB_OPTABSENT 1        /* req. opt. absent */
  145. #define    ICMP_TSTAMP        13        /* timestamp request */
  146. #define    ICMP_TSTAMPREPLY    14        /* timestamp reply */
  147. #define    ICMP_IREQ        15        /* information request */
  148. #define    ICMP_IREQREPLY        16        /* information reply */
  149. #define    ICMP_MASKREQ        17        /* address mask request */
  150. #define    ICMP_MASKREPLY        18        /* address mask reply */
  151.  
  152. #define    ICMP_MAXTYPE        18
  153.  
  154. #define    ICMP_INFOTYPE(type) \
  155.     ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
  156.     (type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \
  157.     (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
  158.     (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
  159.     (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
  160.  
  161. #endif
  162.